$prefix-for-webkit: true !default;
$prefix-for-mozilla: true !default;
$prefix-for-microsoft: true !default;
$prefix-for-opera: true !default;
$prefix-for-spec: true !default;

@mixin prefixer($property, $value, $prefixes) {
    @each $prefix in $prefixes {

        @if $prefix == webkit and $prefix-for-webkit == true {
            -webkit-#{$property}: $value;
        } @else if $prefix == moz and $prefix-for-mozilla == true {
            -moz-#{$property}: $value;
        } @else if $prefix == ms and $prefix-for-microsoft == true {
            -ms-#{$property}: $value;
        } @else if $prefix == o and $prefix-for-opera == true {
            -o-#{$property}: $value;
        } @else if $prefix == spec and $prefix-for-spec == true {
            #{$property}: $value;
        } @else {
            @warn "Unrecognized prefix: #{$prefix}";
        }
    }
}

@mixin transform($property...) {
    @include prefixer(transform, $property, webkit moz o spec);
}

@mixin transition($property...) {
    @include prefixer(transition, $property, webkit moz o spec);
}

@mixin animation($property...) {
    @include prefixer(animation, $property, webkit moz ms o spec);
}

@mixin backgroundSize($property...) {
    @include prefixer(background-size, $property, webkit moz o spec);
}

@mixin backgroundPosition($property...) {
    @include prefixer(background-position, $property, webkit moz o spec);
}

@mixin boxShadow($property...) {
    @include prefixer(box-shadow, $property, webkit moz o spec);
}